<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

require_once APPPATH . 'controllers/admin.php';

/**
 * Контроллер обновления скрипта
 *
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */
class Admin_Update extends Admin {

    /**
     * Default version
     * @var string
     */
    const DEFAULT_VERSION = '1.2';
    
    /**
     * Versions
     * @var string
     */
    const VERSION_1_3 = '1.3';
    const VERSION_1_4 = '1.4';
    const VERSION_1_5 = '1.5';
    const VERSION_1_6 = '1.6';
    const VERSION_1_7 = '1.7';
    
    /**
     * Конструктор класса
     *
     * @access public
     * @return Admin_Update
     */
    function Admin_Update() {
        parent::Admin();
        $this->set_menu(1, 1);
    } // end Admin_Update
     
    /**
     * Метод по умолчанию
     *
     * @access public
     */
    function index() {
        $content = '<p>Start upgrade process</p>';
        $version = $this->variables->get('script_version', self::DEFAULT_VERSION);
        if (version_compare($version, self::VERSION_1_3, '<')) {
            $this->updateTo1_3();
            $content .= '<p>Upgraded to version 1.3</p>';
        }
        if (version_compare($version, self::VERSION_1_4, '<')) {
            $this->updateTo1_4();
            $content .= '<p>Upgraded to version 1.4</p>';
        }
        if (version_compare($version, self::VERSION_1_5, '<')) {
            $this->updateTo1_5();
            $content .= '<p>Upgraded to version 1.5</p>';
        }
        if (version_compare($version, self::VERSION_1_6, '<')) {
            $this->updateTo1_6();
            $content .= '<p>Upgraded to version 1.6</p>';
        }
        if (version_compare($version, self::VERSION_1_7, '<')) {
            $this->updateTo1_7();
            $content .= '<p>Upgraded to version 1.7</p>';
        }
        $content .= '<p>Done</p>';
        $this->set_content($content);
        $this->display();
    } // end index
    
    /**
     * Update version to 1.3
     */
    function updateTo1_3() {
        // Создаем таблицу torrent_screenshots
        $sql = "
            CREATE TABLE IF NOT EXISTS `torrent_screenshots` (
              `id_screenshot` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `id_torrent` int(11) unsigned NOT NULL,
              `link` varchar(1024) NOT NULL,
              `linkhash` char(32) NOT NULL,
              `image` varchar(1024) NOT NULL,
              PRIMARY KEY (`id_screenshot`),
              KEY `screenshot` (`id_torrent`,`linkhash`)
            ) DEFAULT CHARSET=utf8;
        ";
        $this->db->query($sql);
        // Добавляем поле titlehash в таблицу videos
        $sql = "SHOW FIELDS FROM videos WHERE FIELD LIKE 'titlehash'";
        $query = $this->db->query($sql);
        if (0 == $query->num_rows()) {
            $sql = "ALTER TABLE videos ADD COLUMN `titlehash` CHAR(32) NOT NULL AFTER `orig_title`";
            $this->db->query($sql);
            $sql = "ALTER TABLE videos ADD KEY `titlehash` (`titlehash`)";
            $this->db->query($sql);
            require_once APPPATH . 'libraries/VideoEntry.php';
            $this->load->helper('text');
            $entry = new VideoEntry();
            $this->db->select('id_video, title, orig_title')
                ->from('videos');
            $query = $this->db->get();
            if (0 < $query->num_rows()) {
                foreach ($query->result_array() as $row) {
                    $entry->setIdVideo($row['id_video']);
                    $entry->setTitle($row['title']);
                    $entry->setOrigTitle($row['orig_title']);
                    $titlehash = $entry->getTitleHash();
                    $this->db->where('id_video', $row['id_video'])
                        ->update('videos', array('titlehash' => $titlehash));
                }
            }
        }
        // Помечаем версию ключа
        $this->variables->insert('private_key_version', 2);
        // Помечаем версию
        $this->variables->insert('script_version', self::VERSION_1_3);
    }
     
    /**
     * Update version to 1.4
     */
    function updateTo1_4() {
        // Помечаем версию
        $this->variables->insert('script_version', self::VERSION_1_4);
    }
    
    /**
     * Update version to 1.5
     */
    function updateTo1_5() {
        // Создаем таблицу partners
        $sql = "
            CREATE TABLE `partners` (
              `id_partner` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(20) NOT NULL,
              `type` enum('download','online') NOT NULL DEFAULT 'download',
              `title` varchar(50) NOT NULL,
              `shop` varchar(100) NOT NULL,
              `partner_id` varchar(20) NOT NULL,
              `status` enum('active','paused','deleted') NOT NULL DEFAULT 'active',
              `position` int(11) unsigned NOT NULL,
              `xml_link` varchar(255) NOT NULL,
              `video_link` varchar(255) NOT NULL,
              PRIMARY KEY (`id_partner`),
              KEY `status` (`status`)
            ) DEFAULT CHARSET=utf8
        ";
        $this->db->query($sql);
        // Создаем таблицу video_partners
        $sql = "
            CREATE TABLE `video_partners` (
              `id_video` int(11) unsigned NOT NULL,
              `id_partner` int(11) unsigned NOT NULL,
              `external_id` varchar(100) NOT NULL,
              PRIMARY KEY (`id_video`,`id_partner`)
            ) ENGINE=MyISAM DEFAULT CHARSET=utf8
        ";
        $this->db->query($sql);
        // Создаем таблицу titles
        $sql = "
            CREATE TABLE `titles` (
              `id_title` int(11) unsigned NOT NULL AUTO_INCREMENT,
              `name` varchar(50) NOT NULL,
              `title` varchar(1000) DEFAULT NULL,
              `description` varchar(1000) DEFAULT NULL,
              `keywords` varchar(1000) DEFAULT NULL,
              `information` text,
              PRIMARY KEY (`id_title`),
              UNIQUE KEY `name` (`name`)
            ) DEFAULT CHARSET=utf8
        ";
        $this->db->query($sql);
        // Добавляем записи
        $sqls = array(
            "insert  into `partners`(`id_partner`,`name`,`type`,`title`,`shop`,`partner_id`,`status`,`position`,`xml_link`,`video_link`) values (1,'Kinoperez','download','Kinoperez','aakino.ru','3608','active',1,'http://kinoperez.ru/getxml.php','http://[SHOP]/movie/[EXTERNAL_ID].html?aid=[PARTNER_ID]');",
            "insert  into `partners`(`id_partner`,`name`,`type`,`title`,`shop`,`partner_id`,`status`,`position`,`xml_link`,`video_link`) values (2,'Dircash','download','Dircash','abcmovie.net','4604','active',2,'http://dircash.com/xml.php?wmid=[PARTNER_ID]','http://[SHOP]/[PARTNER_ID]/download/[EXTERNAL_ID]/');",
            "insert  into `partners`(`id_partner`,`name`,`type`,`title`,`shop`,`partner_id`,`status`,`position`,`xml_link`,`video_link`) values (3,'Loadpartners','download','Loadpartners','loadpartners.com','4751','active',3,'http://kinoloads.com/bd.php?pid=[PARTNER_ID]&full=1','http://[SHOP]/link-[PARTNER_ID]-1-[EXTERNAL_ID]');",
            "insert  into `partners`(`id_partner`,`name`,`type`,`title`,`shop`,`partner_id`,`status`,`position`,`xml_link`,`video_link`) values (4,'KinoperezOnline','online','Kinoperez','hd-tube.ru','3608','active',4,'http://kinoperez.ru/dbxml_online.php','http://[SHOP]/player/js_film/[EXTERNAL_ID]/640/480/F7F7F7/?aid=[PARTNER_ID]&goout=0&hide_pay_button=1&iframe_button=9');",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (1,'map','Карта сайта',NULL,NULL,NULL);",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (2,'news','Новости',NULL,NULL,NULL);",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (3,'search','Результаты поиска для &laquo;%s&raquo;',NULL,NULL,'%s - подменяется на поисковый кейворд');",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (4,'genres','Все жанры',NULL,NULL,NULL);",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (5,'countries','Все страны',NULL,NULL,NULL);",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (6,'torrent','Скачать торрент файл',NULL,NULL,NULL);",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (7,'video','Скачать %s бесплатно',NULL,NULL,'%s - подменяется на название фильма');",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (8,'error_404','404: Страница не найдена',NULL,NULL,NULL);",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (9,'front','HWD VideoTracker - индексатор торрент-фильмов',NULL,NULL,NULL);",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (10,'catalog','Каталог фильмов',NULL,NULL,NULL);",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (11,'catalog_by_novelty','Новинки кино %d скачать бесплатно',NULL,NULL,'%d - подменяется на год');",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (12,'catalog_by_genre','Жанр: %s',NULL,NULL,'%s - подменяется на название жанра');",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (13,'catalog_by_country','Страна: %s',NULL,NULL,'%s - подменяется на название страны');",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (14,'catalog_by_actor','Актер: %s',NULL,NULL,'%s - подменяется на актера');",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (15,'catalog_by_director','Режиссер: %s',NULL,NULL,'%s - подменяется на режисера');",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (16,'catalog_by_year','Год: %s',NULL,NULL,'%s - подменяется на год');",
            "insert  into `titles`(`id_title`,`name`,`title`,`description`,`keywords`,`information`) values (17,'default_state','HWD VideoTracker - индексатор торрент-фильмов','HWD VideoTracker - индексатор торрент-фильмов','HWD VideoTracker,  индексатор торрент-фильмов, трекер',NULL);",
            "insert into `sources`(`id_source`,`name`,`title`,`status`,`position`) values (NULL, 'Rutor', 'rutor.org', 'active', 4);",
            "update sources set name = 'Firebit', title = 'firebit.org' where name = 'Freetorrents';"
        );
        foreach ($sqls as $sql) {
            $this->db->query($sql);
        }
        // Создаем папку torrents
        mkdir(BASEPATH . '../data/torrents');
        chmod(BASEPATH . '../data/torrents', 0777);
        // Помечаем версию
        $this->variables->insert('script_version', self::VERSION_1_5);
    }

    /**
     * Update version to 1.6
     */
    function updateTo1_6() {
        // Новые трейлеры
        $sql = "alter table `videos` drop column `trailer`, add column `trailer` text NULL after `num_torrents`";
        $this->db->query($sql);
        // Помечаем версию
        $this->variables->insert('script_version', self::VERSION_1_6);
    }

    /**
     * Update version to 1.7
     */
    function updateTo1_7() {

    }
    
}
